package com.hisense.hisensedatacheck.service.impl;

import com.hisense.hisensedatacheck.dao.ZrrXzxkxxMapper;
import com.hisense.hisensedatacheck.entity.ZrrXzxkxx;
import com.hisense.hisensedatacheck.service.ZrrXzxkxxVerifyService;
import com.hisense.hisensedatacheck.uitls.Verify;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class ZrrXzxkxxVerifyServiceImpl implements ZrrXzxkxxVerifyService {

    @Autowired
    private ZrrXzxkxxMapper zrrXzxkxxMapper;

    //自然人行政许可
    @Override
    public void zrrXzxkxxVerify() {
        //        操作状态修改
        zrrXzxkxxMapper.updateOperation();
        List<ZrrXzxkxx> zrrXzxkxxes = zrrXzxkxxMapper.selectAll();
        ArrayList<ZrrXzxkxx> updateZrrXzxkxxes = new ArrayList<>();
        for (ZrrXzxkxx zrrXzxkxx : zrrXzxkxxes) {
            ArrayList<String> errors = new ArrayList<>();
            if (Verify.isNull(zrrXzxkxx.getXkXdrMc())) {
                errors.add("“行政相对人名称” 为空;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkXdrMc(), 200)) {
                errors.add("“行政相对人名称”长度超过200个字符;");
            }
            if (Verify.isWenHao(zrrXzxkxx.getXkXdrMc())) {
                errors.add("“行政相对人名称”包含中英文问号;");
            }
            if (Verify.isShugGangAndXieGangAndNull(zrrXzxkxx.getXkXdrMc())) {
                errors.add("“行政相对人名称”不能为空或包含|/\\符号;");
            }
            if (Verify.isNullOrTrueOrXingHao(zrrXzxkxx.getXkXdrMc())) {
                errors.add("“行政相对人名称”不得包含*或null或test;");
            } else if (Verify.isZiFuChangDu(zrrXzxkxx.getXkXdrMc())) {
                errors.add("“行政相对人名称”不得包含*或null或test，且长度必须大于一个汉字或大于三个字符;");
            }
            if (Verify.NotZiRanRen(zrrXzxkxx.getXkXdrLb())) {
                errors.add("“行政相对人类别”取值不符合字典表范围;");
            } else {
                if (!Verify.isNull(zrrXzxkxx.getXkXdrShxym())) {
                    errors.add("“行政相对人类别”为自然人时，“统一社会信用代码”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkXdrGszc())) {
                    errors.add("“行政相对人类别”为自然人时，“工商注册号”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkXdrZzjg())) {
                    errors.add("“行政相对人类别”为自然人时，“组织机构代码”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkXdrSwdj())) {
                    errors.add("“行政相对人类别”为自然人时，“税务登记号”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkXdrSydw())) {
                    errors.add("“行政相对人类别”为自然人时，“事业单位证书号”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkXdrShzz())) {
                    errors.add("“行政相对人类别”为自然人时，“社会组织登记证号”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkFrdb())) {
                    errors.add("“行政相对人类别”为自然人时，“法定代表人”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkFrZjlx())) {
                    errors.add("“行政相对人类别”为自然人时，“法定代表人证件类型”必须为空;");
                }
                if (!Verify.isNull(zrrXzxkxx.getXkFrZjhm())) {
                    errors.add("“行政相对人类别”为自然人时，“法定代表人证件号码”必须为空;");
                }
                if (Verify.isNull(zrrXzxkxx.getXkXdrZjlx())) {
                    errors.add("“行政相对人类别”为自然人时,“证件类型”必填;");
                }
                if (Verify.fddbrzjlxIsShenFenZheng(zrrXzxkxx.getXkXdrZjlx(), zrrXzxkxx.getXkXdrZjhm())) {
                    errors.add("“行政相对人类别”为自然人且证件类型”为“身份证”时，身份证校验错误;");
                }
                if ((zrrXzxkxx.getXkXdrZjlx() != null && (!zrrXzxkxx.getXkXdrZjlx().equals("身份证"))) && Verify.isNull(zrrXzxkxx.getXkXdrZjhm())) {
                    errors.add("“行政相对人类别”为自然人且“证件类型”为其他值时，“证件号码”必填;");
                }
                if (Verify.isLength(zrrXzxkxx.getXkXdrZjhm(), 64)) {
                    errors.add("“行政相对人类别”为自然人时，“证件号码”长度超过64个字符;");
                }
            }
            if (Verify.isFddbrzjlx(zrrXzxkxx.getXkXdrZjlx())) {
                errors.add("“证件类型”取值不符合字典表范围;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkXdrZjlx())) {
                errors.add("“证件类型”字段为必填项;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkXdrZjhm())) {
                errors.add("“（证件号码）”字段为必填项;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkXkws())) {
                errors.add("“行政许可决定文书名称”为空;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkXkws(), 64)) {
                errors.add("“行政许可决定文书名称”长度超过64个字符;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkWsh())) {
                errors.add("“行政许可决定文书号”为空;");
            }
            if (Verify.isNullOrTrueOrXingHao(zrrXzxkxx.getXkWsh())) {
                errors.add("“行政许可决定文书号”不得包含*或null或test;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkWsh(), 64)) {
                errors.add("“行政许可决定文书号”长度超过64个字符;");
            }
            if (Verify.xuKeLeiBieJiaoYan(zrrXzxkxx.getXkXklb())) {
                errors.add("许可类别为“其他”时，许可类别格式为“其他-具体类别”;");
            }
            if (Verify.xuKeLeiBie(zrrXzxkxx.getXkXklb())) {
                errors.add("“许可类别”不存在字典表或者不是以“其他-”开头;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkXklb(), 256)) {
                errors.add("“许可类别”长度超过256个字符;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkXkzs(), 64)) {
                errors.add("“许可证书名称”长度超过64个字符;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkXkbh(), 64)) {
                errors.add("“许可编号”长度超过64个字符;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkNr())) {
                errors.add("“许可内容”不予许为空;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkNr(), 4000)) {
                errors.add("“许可内容”长度超过4000个字符;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkJdrq())) {
                errors.add("“许可决定日期”为空;");
            }
            if (Verify.riQiPanDuan(zrrXzxkxx.getXkJdrq(), new Date())) {
                errors.add("“许可决定日期”不可超过当前日期;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkYxqz())) {
                errors.add("“有效期自”为空;");
            }
            if (Verify.riQiPanDuan(zrrXzxkxx.getXkJdrq(), zrrXzxkxx.getXkYxqz())) {
                errors.add("“有效期自”不可小于“许可决定日期;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkYxqzi())) {
                errors.add("“有效期至”为空;");
            }
            if (Verify.riQiPanDuan(zrrXzxkxx.getXkYxqz(), zrrXzxkxx.getXkYxqzi())) {
                errors.add("“有效期至”不可小于“有效期自”;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkXkjg())) {
                errors.add("“许可机关”为空;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkXkjg(), 200)) {
                errors.add("“许可机关”长度超过200个字符;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkXkjgdm())) {
                errors.add("“许可机关统一社会信用代码”为空;");
            }
            if (Verify.isTyshxydm(zrrXzxkxx.getXkXkjgdm())) {
                errors.add("“许可机关统一社会信用代码”校验错误;");
            }
            if (!(zrrXzxkxx.getXkZt() == 1 || zrrXzxkxx.getXkZt() == 2)) {
                errors.add("“当前状态”取值不符合字典表范围;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkLydw())) {
                errors.add("“数据来源单位”为空;");
            }
            if (Verify.isLength(zrrXzxkxx.getXkLydw(), 200)) {
                errors.add("“数据来源单位”长度超过200个字符;");
            }
            if (Verify.isNull(zrrXzxkxx.getXkLydwdm())) {
                errors.add("“数据来源单位统一社会信用代码”为空;");
            }
            if (Verify.isTyshxydm(zrrXzxkxx.getXkLydwdm())) {
                errors.add("“数据来源单位统一社会信用代码”校验错误;");
            }
            if (Verify.isLength(zrrXzxkxx.getBz(), 512)) {
                errors.add("“备注”长度超过512个字符;");
            }
            if (Verify.yiWenShuJu(zrrXzxkxx.getXkXkjgdm()) || Verify.yiWenShuJu(zrrXzxkxx.getXkLydwdm())) {
                errors.add("疑问数据（决定机关代码/数据来源单位代码）;");
            }
            if (!(zrrXzxkxx.getCdOperation().equals("I") || zrrXzxkxx.getCdOperation().equals("U") || zrrXzxkxx.getCdOperation().equals("D"))) {
                errors.add("“cd_operation（操作状态）”字段取值范围错误;");
            }
            if (errors.size() != 0) {
                zrrXzxkxx.setErrorData(errors.toString());
                updateZrrXzxkxxes.add(zrrXzxkxx);
            }
        }
        if (updateZrrXzxkxxes.size() != 0) {
            System.out.println("修改条数:"+updateZrrXzxkxxes.size());
            zrrXzxkxxMapper.updateErrorByIds(updateZrrXzxkxxes);
        }
        System.out.println("自然人行政许可执行完毕");
    }
}
